using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using DragonAwakening.Game;
using DragonAwakening.Core.Graphics;

namespace DragonAwakening.Core.Game
{
/*
    /// <summary>
    /// Game state
    /// </summary>
    public enum GameState
    {
        /// <summary>
        /// Scene view, no fights, no dialogs.
        /// </summary>
        Normal,

        /// <summary>
        /// Fight with the creature(s), no movement allowed.
        /// </summary>
        Fight,

        /// <summary>
        /// Dialog with the creature, no movement allowed.
        /// </summary>
        Dialog,

        /// <summary>
        /// Character info screen. Browsing basic character stats.
        /// </summary>
        CharacterStats,

        /// <summary>
        /// Character info screen. Browsing character bags.
        /// </summary>
        CharacterBags
    }
*/
    /// <summary>
    /// Game context.
    /// </summary>
    public interface IGameContext
    {
        /// <summary>
        /// Sets the player current position.
        /// </summary>
        /// <param name="position">Position.</param>
        void SetPlayerCurrentPosition(Point position);

        /// <summary>
        /// Sets player current direction.
        /// </summary>
        /// <param name="direction">Direction.</param>
        void SetPlayerCurrentDirection(Sides direction);

        /// <summary>
        /// Gets the view for the object.
        /// </summary>
        /// <typeparam name="T">Type of the object</typeparam>
        IScreenView<T> GetView<T>();

        /// <summary>
        /// Gets the list of the group.
        /// </summary>
        List<Character> Group { get; }

        /// <summary>
        /// Gets the game state
        /// </summary>
        GameState CurrentState { get; }

        /// <summary>
        /// Tries to set the game state.
        /// </summary>
        /// <param name="state">Game state to be set.</param>
        /// <returns>True if state has been changed, otherwise false.</returns>
        bool SetState(GameState state);
    }
}
